package com.common.weibolib;

import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.starappallcommon.R;

/**
 * 百度SDK定位封装
 * ClassName:BDLocationProvider
 * Function: TODO ADD FUNCTION
 * Reason:	 TODO ADD REASON
 * 
 * @author   huangyx		
 * @version  
 * @since    Ver 1.1
 * @Date	 2014	2014-4-25		上午10:58:08
 *
 * @see
 */
public class BDLocationProvider{
	
    private LocationClient mLocationClient;
    private BDLocationListener mOnLocationListener = null;
    private boolean mIsStart = false;
    
    /**
     * 构造函数一定要在主线程调用
     * Creates a new instance of BDLocationProvider.
     *
     * @param ctx
     * @param listener
     */
    public BDLocationProvider(Context ctx, BDLocationListener listener) {
    	mOnLocationListener = listener;
        mLocationClient = new LocationClient(ctx.getApplicationContext());
        mLocationClient.registerLocationListener(mOnLocationListener);
        LocationClientOption option = new LocationClientOption();
        option.setProdName(ctx.getString(R.string.app_name));
        option.setIsNeedAddress(true);// 表示返回详细地址
        option.disableCache(true);//禁止启用缓存定位
        option.setOpenGps(false);
        option.setPoiExtraInfo(false);//是否返回详细信息
		mLocationClient.setLocOption(option);
    }
    
    /**
     * 开始定位
     * @n<b>函数名称</b>     :startLocation
     * @brief
     * @see
     * @since    Ver 1.1
     * @<b>作者</b>          :  huangyx
     * @<b>创建时间</b>      :  2014-4-25上午11:00:20
     */
    public void startLocation() {
        try {
            if (mLocationClient.isStarted()) {
                int ret = mLocationClient.requestLocation();
                switch (ret) {
                case 0:
                    // 正常
                    break;
                case 1:
                    // 服务没有启动。
                    mLocationClient.start();
                    mIsStart = true;
                    break;
                case 6:
                    // 请求间隔过短。 前后两次请求定位时间间隔不能小于1000ms。
                    Thread.sleep(1000);
                    mLocationClient.requestLocation();
                    break;
                default:
                    break;
                }
            } else {
                mLocationClient.start();
                mIsStart = true;
            }
        } catch (Exception e) {
        }
    }
    
    /**
     * 停止定位
     * @n<b>函数名称</b>     :stopLocation
     * @brief
     * @see
     * @since    Ver 1.1
     * @<b>作者</b>          :  huangyx
     * @<b>创建时间</b>      :  2014-4-25上午11:02:47
     */
    public void stopLocation() {
        try {
        	if(!mIsStart)return;
        	mIsStart = false;
            if (mLocationClient != null) {
                mLocationClient.unRegisterLocationListener(mOnLocationListener);
                mLocationClient.stop();
                mOnLocationListener = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 验证定位返回的信息是否有效
     * @n<b>函数名称</b>     :isValidResult
     * @brief
     * @see
     * @since    Ver 1.1
     * @param location
     * @return
     * @<b>作者</b>          :  huangyx
     * @<b>创建时间</b>      :  2014-4-25上午11:10:54
     */
    public static boolean isValidResult(BDLocation location) {
        try {
        	if(location != null){
        		double latitude = location.getLatitude();
        		double longitude = location.getLongitude();
        		return ((latitude > -90 && latitude < 90)
                        && (longitude > -180 &&longitude < 180)
                        && (latitude != Double.MIN_VALUE && longitude != Double.MIN_VALUE));
        	}
        } catch (Exception e) {

        }
        return false;
    }
    
}
